package se.stabby.undersok.model.inmemory;

import com.google.common.collect.ImmutableList;
import se.stabby.undersok.model.PågåendeUndersökningId;
import se.stabby.undersok.model.Resultat;
import se.stabby.undersok.model.ResultatId;
import se.stabby.undersok.model.UndersökningsId;
import se.stabby.undersok.repository.ResultatRepository;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;

/**
 * User: per.segersten
 * Date: 2014-05-25
 */
public class InMemoryResultatRepository implements ResultatRepository {

    private final ConcurrentHashMap<PågåendeUndersökningId, Resultat> resultatMap1 = new ConcurrentHashMap<>();
    private final ConcurrentHashMap<UndersökningsId, List<Resultat>> resultatMap2 = new ConcurrentHashMap<>();

    @Override
    public ImmutableList<Resultat> hämtaAlla(UndersökningsId undersökningsId) {
        return ImmutableList.copyOf(resultatMap2.get(undersökningsId));
    }

    @Override
    public Resultat sök(PågåendeUndersökningId pågåendeUndersökningId) {
        return resultatMap1.get(pågåendeUndersökningId);
    }

    @Override
    public void spara(Resultat resultat) {
        resultatMap1.put(resultat.pågåendeUndersökningId, resultat);
        resultatMap2.putIfAbsent(resultat.undersökningsId, new ArrayList<>());
        resultatMap2.get(resultat.undersökningsId).add(resultat);
    }
}
